package com.system.test.designPattern.template;

/**
 * 悍马抽象模板类
 * 抽象模型：有钩子才完美
 * @author kaifa002
 *
 */
public abstract class HummerModel {
	
	// 钩子方法，默认是会响的
    protected boolean alarmFlag() {
        return true;
    }
        
	// 能发动
	public abstract void start();

	// 能停下来
	public abstract void stop();

	// 喇叭会出声音
	public abstract void alarm();

	// 引擎会轰隆隆地响
	public abstract void engineBoom();

	/**
	 * 为了防止恶意的操作，一般模板方法都加上final关键字，不允许被覆写。
	 */
	public final void run() {
		// 先发动汽车
		this.start();
		// 引擎开始轰鸣
		this.engineBoom();
		// 然后就开始跑了，跑的过程中遇到一条狗挡路，就按喇叭
		//想叫再叫
        if (alarmFlag()) {
            this.alarm();
        }
		// 到达目的地就停车
		this.stop();
	}
	
}